package k1_jdbc.demo01;

import java.sql.*;
import java.util.Properties;

public class JDBCConnection {

    static Connection conn = null;
    static Statement statement = null;
    static ResultSet rs = null;

    public static void addUSer(){

        try{
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接(Connection 相当于两地之间的铁轨)
            //第一种方式，只给定url，使用本机的用户名进行登录
//            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/test");
            //第二种方式，给定url，用户名和密码进行登录
//            Connection conn = DriverManager.getConnection(
//                    "jdbc:mysql://localhost:3308/test",
//                    "root",
//                    "root"
//            );

            //第三种方式，除了url以外其他的所有属性都可以用 Properties 进行封装
            Properties prop = new Properties();
            prop.put("user","root");
            prop.put("password","root");

            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3308/test",
                        prop
            );
            //3 创建操作语句的Statement对象(相当于铁轨上的火车)
            Statement statement = conn.createStatement();

            //4.执行sql语句
            //4.1 先定义要执行的sql语句
            String sql = "insert into tb_user1(name,age) values('李狗蛋',20),('王二麻子',30)";
            String sql1 = "insert into tb_user1(name,age) values('李狗蛋',20),('王二麻子',30)";
            String sql2 = "insert into tb_user1(name,age) values('李狗蛋',20),('王二麻子',30)";

            //做批处理，同时添加多条数据
            statement.addBatch(sql);
            statement.addBatch(sql1);
            statement.addBatch(sql2);

            //4.2 通过Statement对象执行sql语句
            //如果直接调用execute方法，如果是增删改的操作的时候，返回的是false；如果是查询，返回的是true
            //如果调用executeUpdate方法，适用于 增删改 操作，返回值为int类型，表示受影响的行数
            int[] result = statement.executeBatch();

            if(result.length>0){
                System.out.println("添加成功了"+result.length+"条数据");
            }else{
                System.out.println("添加失败");
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            try {
                if(statement!=null){
                    statement.close();
                }
                if(conn!=null){
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public static void deleteUSer(){

        try{
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3308/test",
                    "root",
                    "root"
            );

            //3 创建操作语句的Statement对象(相当于铁轨上的火车)
            Statement statement = conn.createStatement();

            //4.执行sql语句
            //4.1 先定义要执行的sql语句
            String sql = "delete from tb_user1 where id>5";
            //4.2 通过Statement对象执行sql语句
            //如果直接调用execute方法，如果是增删改的操作的时候，返回的是false；如果是查询，返回的是true
            int result = statement.executeUpdate(sql);

            System.out.println(result);

            if(result>0){
                System.out.println("成功删除了"+result+"条数据");
            }else{
                System.out.println("删除失败");
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            try {
                if(statement!=null){
                    statement.close();
                }
                if(conn!=null){
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public static void updateUSer(){

        try{
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3308/test",
                    "root",
                    "root"
            );

            //3 创建操作语句的Statement对象(相当于铁轨上的火车)
            Statement statement = conn.createStatement();

            //4.执行sql语句
            //4.1 先定义要执行的sql语句
            String sql = "update tb_user1 set name='王二麻子' where id=5";
            //4.2 通过Statement对象执行sql语句
            //如果直接调用execute方法，如果是增删改的操作的时候，返回的是false；如果是查询，返回的是true
            //如果调用executeUpdate方法，适用于 增删改 操作，返回值为int类型，表示受影响的行数
            int result = statement.executeUpdate(sql);

            System.out.println(result);

            if(result>0){
                System.out.println("成功更新了"+result+"条数据");
            }else{
                System.out.println("更新失败");
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            try {
                if(statement!=null){
                    statement.close();
                }
                if(conn!=null){
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public static void selectUSer(){

        try{
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3308/test",
                    "root",
                    "root"
            );

            //3 创建操作语句的Statement对象(相当于铁轨上的火车)
            Statement statement = conn.createStatement();

            //4.执行sql语句
            //4.1 先定义要执行的sql语句
            String sql = "select * from tb_user1";
            //4.2 通过Statement对象执行sql语句
            //如果直接调用execute方法，如果是增删改的操作的时候，返回的是false；如果是查询，返回的是true
            //如果调用executeQuery方法，获取到所有数据的结果集ResultSet
            rs = statement.executeQuery(sql);

            //结果集相当于一个迭代器，通过next方法判断是否有下一个值
            while(rs.next()){
                System.out.println(rs.getInt("id"));
                System.out.println(rs.getString(2));
                System.out.println(rs.getInt(3));

                System.out.println("====================================================");
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            try {
                if(rs!=null){
                    rs.close();
                }
                if(statement!=null){
                    statement.close();
                }
                if(conn!=null){
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        addUSer();
    }

}
